package com.briup.smartcity_group6.service.Impl;


import com.briup.smartcity_group6.bean.basic.Carousel;
import com.briup.smartcity_group6.dao.basic.CarouselMapper;
import com.briup.smartcity_group6.dao.ext.CarouselExtMapper;
import com.briup.smartcity_group6.exception.ServiceException;
import com.briup.smartcity_group6.service.ICarouselService;
import com.briup.smartcity_group6.utils.ConstantValue;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
@Service
public class CarouselServiceImpl implements ICarouselService {
    @Autowired
    private CarouselMapper mapper;
    @Autowired
    private CarouselExtMapper extMapper;

    public PageInfo<Carousel> findAll(int pageNum, int pageSize) {
        //java8写法：
        PageInfo<Carousel> pageInfo = PageHelper.startPage(pageNum, pageSize, true).doSelectPageInfo(
                () -> extMapper.selectAll()
        );
        return pageInfo;
    }

    public void deleteById(int id)  {
       Carousel carousel=mapper.selectByPrimaryKey(id);
       if (!(carousel==null))
           throw new ServiceException("轮播图不存在");
        mapper.deleteByPrimaryKey(id);
    }

    public void saveCarousel(Carousel carousel) {
        //id mysql自动生成 默认为null
        //使用0表示禁用状态
        carousel.setCarouselStatus(ConstantValue.NORMAL_STATUS);//推荐使用静态常量表示0对应的业务信息
        //考虑数据的唯一性 不为空 是否符合xxx逻辑
        //1.轮播图的url地址不能重复 （手机号 ....）
        //2.轮播图的名称不能重复
        if (!(null==extMapper.selectByURL(carousel.getCarouselUrl())))
            throw new ServiceException("url重复");
        if (!(null==extMapper.selectByName(carousel.getCarouselName())))
            throw new ServiceException("轮播图名字重复");
        mapper.insert(carousel);
    }

    public void updateCarousel(Carousel carousel) {

        //补充： 每次更新数据前，判断数据是否存在。
        if (null==mapper.selectByPrimaryKey(carousel.getCarouselId()))
            throw new ServiceException("更新的轮播图不存在");

        /*
            当属性为空，将数据库对应的列值设置为空，
            导致问题：当只修改状态时，会将其他属性信息修改为空。
         */
        //mapper.updateByPrimaryKey(carousel);
        //只修改传递的参数值，未传递表示不进行修改
        mapper.updateByPrimaryKeySelective(carousel);
    }

    public List<Carousel> findYesCarousel() {
        //查询开启状态的轮播图
        return extMapper.selectByYes();
    }
}
